package com.mojo.demo2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 代理请求处理程序
 *
 * @author <a href="mailto:mojo_jj@163.com">Mojo</a>
 * copyright (C), 2013-2021, 广州九尾信息科技有限公司
 */
public class ProxyInvocationHandler implements InvocationHandler {
    //真实角色
    private Object t;

    public void setT(Object t) {
        this.t = t;
    }

    //生成获取代理类（代理角色）
    public Object getProxy() {
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                //获取真实角色的接口数组
                t.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        String name = method.getName();
        log(name);
        return method.invoke(t, args);
    }

    public void log(String msg) {
        System.out.println("使用" + msg + "方法");
    }
}
